using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using hotelservices;

namespace hotelservices.app_code.ds
{
    public class HotelDS
    {
        public hotel getHotelById(int id)
        {
            HotelEntities entities = new HotelEntities();
            IQueryable<hotel> res = (from s in entities.hotel where s.idhotel == id select s);
            if (res.Count() > 0)
                return res.First();
            else
                return null;
        }

        public hotel getHotelByName(string name)
        {
            HotelEntities entities = new HotelEntities();
            return (from s in entities.hotel where s.nombre == name select s).First();
        }

        public List<HotelDC> getAllHoteles()
        {
            HotelEntities entities = new HotelEntities();
            List<hotel> res = (from s in entities.hotel select s).ToList();
            List<HotelDC> ret = new List<HotelDC>();
            HotelDC aux;
            for (int i = 0; i < res.Count(); i++)
            {
                aux = new HotelDC();
                aux.Idhotel = res.ElementAt(i).idhotel;
                aux.Nombre = res.ElementAt(i).nombre;
                aux.Numpisos = res.ElementAt(i).numpisos;
                aux.Habporpiso = res.ElementAt(i).habporpiso;
                //hacer un for para agregar los cuartos
                CuartoDC aux2;
                List<CuartoDC> list = new List<CuartoDC>();
                if (res.ElementAt(i).cuarto != null)
                {
                    for (int j = 0; j < res.ElementAt(i).cuarto.Count; j++)
                    {
                        aux2 = new CuartoDC();
                        aux2.Idcuarto = res.ElementAt(i).cuarto.ElementAt(j).idcuarto;
                        aux2.Capacidad = res.ElementAt(i).cuarto.ElementAt(j).capacidad;
                        aux2.Precio = res.ElementAt(i).cuarto.ElementAt(j).precio;
                        aux2.Piso = res.ElementAt(i).cuarto.ElementAt(j).piso;
                        aux2.Fk_hotel = res.ElementAt(i).cuarto.ElementAt(j).fk_hotel;
                        if (res.ElementAt(i).cuarto.ElementAt(j).fk_reserva != null)
                            aux2.Fk_reserva = (long)res.ElementAt(i).cuarto.ElementAt(j).fk_reserva;
                        aux2.Numhab = res.ElementAt(i).cuarto.ElementAt(j).numhab;
                        list.Add(aux2);
                    }
                    aux.cuarto = list;
                }
                ret.Add(aux);
            }
            return ret;
        }

        public bool save(HotelDC hoteles)
        {
            HotelEntities entities = new HotelEntities();
            hotel aux = new hotel();
            aux.idhotel = hoteles.Idhotel;
            aux.nombre = hoteles.Nombre;
            aux.numpisos = hoteles.Numpisos;
            aux.habporpiso = hoteles.Habporpiso;
            entities.hotel.Add(aux);
            int res = entities.SaveChanges();
            if (res > 0)
                return true;
            else
                return false;
        }

        public bool update(HotelDC hoteles)
        {
            HotelEntities entities = new HotelEntities();
            IQueryable<hotel> res = (from s in entities.hotel where s.idhotel == hoteles.Idhotel select s);
            if (res.Count() > 0)
            {
                hotel aux = new hotel();
                aux.idhotel = hoteles.Idhotel;
                aux.nombre = hoteles.Nombre;
                aux.numpisos = hoteles.Numpisos;
                aux.habporpiso = hoteles.Habporpiso;
                int result = entities.SaveChanges();
                if (result > 0)
                    return true;
                else
                    return false;
            }
            return false;
        }
        
        public List<hotel> GetHotelesW(int startIndex, int maxRows)
        {
            using (HotelEntities entities = new HotelEntities())
            {
                return (from hotel in entities.hotel
                        select hotel)
                            .OrderBy(hotel => hotel.idhotel)
                            .Skip(startIndex)
                            .Take(maxRows).ToList();
            }
        }

        public int GetHotelesCount()
        {
            using (HotelEntities entities = new HotelEntities())
            {
                return entities.hotel.Count();
            }
        }
    }
}